package day0220;

public class Demo {

    public static void main(String[] args) {
//        Animal animal = new Animal();
//        animal.say();
//
//        Dog dog = new Dog();
//        dog.say();

        // 多态
        Animal animal1 = new Dog();
        animal1 = new Cat(); // 向上转型

        // 调用只能调用父类中声明的方法，不能调用子类拓展的方法
        animal1.say();

//        animal1.catchMouse();  // error
//        animal1.look(); // error

        // 向下转型： 父类类型 --> 子类类型
//        Dog dog = (Dog) animal1;
//        dog.say();
//        dog.look();

        // Dog animal = (Dog) new Animal(); // java.lang.ClassCastException

        // instanceof 判断是否是一个类型
        if (animal1 instanceof Dog){
            Dog dog1 = (Dog) animal1;
            dog1.say();
            dog1.look();
        } else if (animal1 instanceof Cat){
            Cat cat = (Cat) animal1;
            cat.say();
            cat.catchMouse();
        }
    }
}
